home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 26.zip / BS1 part 26 / C for beginners.adf / programs / array.asm < prev    next >
Assembly Source File  |  1978-01-17  |  3KB  |  204 lines

  1. ;:ts=8
  2. ;/* array.c  13 */
  3. ;
  4. ;#define FALSE 0
  5. ;#define TRUE 1
  6. ;#define MAXENTRY 20
  7. ;
  8. ;long total(); /* Declaration of the function */
  9. ;
  10. ;void main()
  11. ;{
  12.     public    _main
  13. _main:
  14.     link    a5,#.2
  15.     movem.l    .3,-(sp)
  16. ;   int i, number, end = FALSE;
  17.     clr.w    -6(a5)
  18. ;   long sum, data[MAXENTRY];
  19. ;
  20. ;   for(i = 0; i <MAXENTRY && !end; i++)
  21.     clr.w    -2(a5)
  22.     bra    .7
  23. .6
  24. ;   {
  25. ;      printf("Enter %d. value: ", i+1);
  26.     move.w    -2(a5),d0
  27.     add.w    #1,d0
  28.     move.w    d0,-(sp)
  29.     pea    .1+0
  30.     jsr    _printf
  31.     add.w    #6,sp
  32. ;      scanf("%6ld", &data[i]); /* 6 digits limit */
  33.     move.w    -2(a5),d0
  34.     ext.l    d0
  35.     asl.l    #2,d0
  36.     lea    -90(a5),a0
  37.     add.l    a0,d0
  38.     move.l    d0,-(sp)
  39.     pea    .1+18
  40.     jsr    _scanf
  41.     add.w    #8,sp
  42. ;      if(!data[i])
  43. ;         end = TRUE;
  44.     move.w    -2(a5),d0
  45.     ext.l    d0
  46.     asl.l    #2,d0
  47.     lea    -90(a5),a0
  48.     tst.l    (a0,d0.l)
  49.     bne    .8
  50.     move.w    #1,-6(a5)
  51. ;   }
  52. .8
  53. .4
  54.     add.w    #1,-2(a5)
  55. .7
  56.     cmp.w    #20,-2(a5)
  57.     bge    .9
  58.     tst.w    -6(a5)
  59.     beq    .6
  60. .9
  61. .5
  62. ;
  63. ;number = i - end; /* If last entry 0, than one less */
  64.     move.w    -2(a5),d0
  65.     sub.w    -6(a5),d0
  66.     move.w    d0,-4(a5)
  67. ;sum = total(data, number);
  68.     move.w    -4(a5),-(sp)
  69.     pea    -90(a5)
  70.     jsr    _total
  71.     add.w    #6,sp
  72.     move.l    d0,-10(a5)
  73. ;printf("The Sum of all %d values is %ld\n", number, sum);
  74.     move.l    -10(a5),-(sp)
  75.     move.w    -4(a5),-(sp)
  76.     pea    .1+23
  77.     jsr    _printf
  78.     lea    10(sp),sp
  79. ;  printf("Deviation from Average %.9lf:\n", (double) sum / numb
  80. ;er);
  81.     move.l    -10(a5),d0
  82.     jsr    .Fflt#
  83.     move.w    -4(a5),d1
  84.     ext.l    d1
  85.     move.l    d0,-(sp)
  86.     move.l    d1,d0
  87.     jsr    .Fflt#
  88.     move.l    d0,d1
  89.     move.l    (sp)+,d0
  90.     jsr    .Fdiv#
  91.     clr.l    -(sp)
  92.     move.l    d0,-(sp)
  93.     pea    .1+56
  94.     jsr    _printf
  95.     lea    12(sp),sp
  96. ;for(i=0; data[i] > 0; i++)
  97.     clr.w    -2(a5)
  98.     bra    .13
  99. .12
  100. ;  printf("Value %d: %5.9lf%%\n", i+1, data[i] * 100.0 / ( (doub
  101. ;le) sum / number ) - 100.0);
  102.     move.w    -2(a5),d0
  103.     ext.l    d0
  104.     asl.l    #2,d0
  105.     lea    -90(a5),a0
  106.     move.l    d0,d1
  107.     move.l    (a0,d1.l),d0
  108.     jsr    .Fflt#
  109.     move.l    #$c8000047,d1
  110.     jsr    .Fmul#
  111.     move.l    d0,-(sp)
  112.     move.l    -10(a5),d0
  113.     jsr    .Fflt#
  114.     move.w    -4(a5),d1
  115.     ext.l    d1
  116.     move.l    d0,-(sp)
  117.     move.l    d1,d0
  118.     jsr    .Fflt#
  119.     move.l    d0,d1
  120.     move.l    (sp)+,d0
  121.     jsr    .Fdiv#
  122.     move.l    d0,d1
  123.     move.l    (sp)+,d0
  124.     jsr    .Fdiv#
  125.     move.l    #$c80000c7,d1
  126.     jsr    .Fadd#
  127.     clr.l    -(sp)
  128.     move.l    d0,-(sp)
  129.     move.w    -2(a5),d0
  130.     add.w    #1,d0
  131.     move.w    d0,-(sp)
  132.     pea    .1+87
  133.     jsr    _printf
  134.     lea    14(sp),sp
  135. .10
  136.     add.w    #1,-2(a5)
  137. .13
  138.     move.w    -2(a5),d0
  139.     ext.l    d0
  140.     asl.l    #2,d0
  141.     lea    -90(a5),a0
  142.     tst.l    (a0,d0.l)
  143.     bgt    .12
  144. .11
  145. ;}
  146. .14
  147.     movem.l    (sp)+,.3
  148.     unlk    a5
  149.     rts
  150. .2    equ    -90
  151. .3    reg    
  152. .1
  153.     dc.b    69,110,116,101,114,32,37,100,46,32,118,97,108,117,101
  154.     dc.b    58,32,0,37,54,108,100,0,84,104,101,32,83,117,109
  155.     dc.b    32,111,102,32,97,108,108,32,37,100,32,118,97,108,117
  156.     dc.b    101,115,32,105,115,32,37,108,100,10,0,68,101,118,105
  157.     dc.b    97,116,105,111,110,32,102,114,111,109,32,65,118,101,114
  158.     dc.b    97,103,101,32,37,46,57,108,102,58,10,0,86,97,108
  159.     dc.b    117,101,32,37,100,58,32,37,53,46,57,108,102,37,37
  160.     dc.b    10,0
  161.     ds    0
  162. ;
  163. ;long total(array, cnt)
  164. ;long array[];
  165.     public    _total
  166. _total:
  167.     link    a5,#.16
  168.     movem.l    .17,-(sp)
  169. ;int cnt;
  170. ;{
  171. ;   long sum = 0;
  172.     clr.l    -4(a5)
  173. ;
  174. ;   while(cnt--) /* short and precise */
  175. .18
  176.     move.w    12(a5),d0
  177.     sub.w    #1,12(a5)
  178.     tst.w    d0
  179.     beq    .19
  180. ;     sum += array[cnt];
  181.     move.w    12(a5),d0
  182.     ext.l    d0
  183.     asl.l    #2,d0
  184.     move.l    8(a5),a0
  185.     move.l    (a0,d0.l),d1
  186.     add.l    d1,-4(a5)
  187.     bra    .18
  188. .19
  189. ;   return sum;
  190.     move.l    -4(a5),d0
  191. .20
  192.     movem.l    (sp)+,.17
  193.     unlk    a5
  194.     rts
  195. ;}
  196. .16    equ    -4
  197. .17    reg    
  198. ;
  199.     public    _scanf
  200.     public    _printf
  201.     public    .begin
  202.     dseg
  203.     end
  204.